//package tech.cn.note.word.fun;
//
//import java.time.LocalDate;
//
//import cn.hutool.core.date.DatePattern;
//import com.deepoove.poi.render.compute.RenderDataCompute;
//import lombok.RequiredArgsConstructor;
//import org.apache.commons.lang3.ObjectUtils;
//import tech.cn.note.utils.DateTimeUtils;
//
//import org.springframework.stereotype.Service;
//
//import static java.util.Collections.singletonList;
//import static org.springframework.util.ObjectUtils.isEmpty;
//
//@Service
//@RequiredArgsConstructor
//public class AdtDateFormat implements RenderFunction {
//
//    @Override
//    public String doCalculate(String[] fields, RenderDataCompute renderDataCompute) {
//        if (isEmpty(fields)) {
//            return "";
//        }
//
//        String datePlaceHolder = fields[0];
//        Object date = renderDataCompute.compute(datePlaceHolder);
//        if (ObjectUtils.isEmpty(date)) {
//            return "";
//        }
//
//        LocalDate tradeDate = DateTimeUtils.toLocalDate(date);
//        if (ObjectUtils.isEmpty(tradeDate)) {
//            return "";
//        }
//
//        // 默认 yyyy-MM-dd
//        String dateFormatPattern = DatePattern.NORM_DATE_PATTERN;
//        if (fields.length > 1) {
//            dateFormatPattern = fields[1];
//        }
//
//        String calendarName = CalendarUtils.DEFAULT_CALENDAR_NAME;
//        if (fields.length > 2) {
//            Object calendarNameValue = renderDataCompute.compute(fields[2]);
//            if (ObjectUtils.isNotEmpty(calendarNameValue)) {
//                calendarName = calendarNameValue.toString();
//            }
//        }
//
//        int adjustDays = 0;
//        if (fields.length > 3) {
//            adjustDays = tryTransformIntValue(fields[3]);
//        }
//
//        if (adjustDays == 0) {
//            tradeDate = CalendarUtils.getNextBusinessDay(tradeDate, singletonList(calendarName));
//        } else {
//            tradeDate = CalendarUtils.adjustBusinessDay(tradeDate, singletonList(calendarName), adjustDays);
//        }
//        return DateTimeUtils.localDateParseToStr(tradeDate, dateFormatPattern);
//    }
//
//    private int tryTransformIntValue(String value) {
//        try {
//            return Integer.parseInt(value);
//        } catch (Exception e) {
//            return 0;
//        }
//    }
//}
